var script = document.createElement('script');
script.src = 'js/jquery.js';
script.type = 'text/javascript';
script.src = 'js/canvasjs.min.js';
document.getElementsByTagName('head')[0].appendChild(script);
var map;
var cz = 5;
var lat = 19.777042;
var lon = -98.536377

var idLines = "";

function SeleccionaTodo(boton) {
    switch (boton) {
    case 1:
        $('#lineas option').prop('selected', 'selected');
        habilitaBoton1();
        break;
    case 2:
        $('#roles option').prop('selected', 'selected');
        habilitaBoton2();
        break;
    case 3:
        $('#unidades option').prop('selected', 'selected');
        habilitaBotonGenerar();
        break;
    }
}

function btnLimpiar() {
    location.reload();
}


function consultaRoles() {
    $('#lineas').prop('disabled', true);
    $('#roles').prop('disabled', false);
    $('#btngo1').prop('disabled', true);
    $('#btngo2').prop('disabled', true);

	$('#lineas :selected').each(function (i, selected) {
		idLines += $(selected).val() + ",";
	});
    
    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws_library.php",
        data: {
            func: "getRoutes",
            id_lines: idLines,
            token: p
        }
    })
        .done(function (answer) {
            var roles = JSON.parse(answer);

            if (roles.state == "true") {

                var sel = $('#roles').empty();
                var rol;
                for (rol in roles.resultado) {
                    sel.append('<option value="' + roles.resultado[rol].id_rol + '">' + roles.resultado[rol].descripcion + '</option>');
                }

            } else if (roles.state == "false") {
                alert('Ocurrio un error. \n Error: ' + roles.reason);
					if (roles.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}
				
            }
        });
}


function ConsultaUnidades() {
    $('#roles').prop('disabled', true);
    $('#unidades').prop('disabled', false);
    $('#btngo2').prop('disabled', true);

    var idRoles = "";
    // La variable lineas se vuelve global para usarla en otras funciones
    var idUnidades = "";
    $('#roles :selected').each(function (i, selected) {
        idRoles += $(selected).val() + ",";
    });

    $('#lineas :selected').each(function (i, selected) {
        idLines += $(selected).val() + ",";
    });

    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws_library.php",
        async: false,
        data: {
            func: "getUnits",
            id_routes: idRoles,
            id_lines: idLines,
			token: p
        }
    })

    .done(function (json) {
        var unidades = JSON.parse(json);
        if (unidades.state == "true") {
            var sel = $('#unidades').empty();
            for (var i = 0; i < unidades.resultado.length; i++) {
                sel.append('<option value="' + unidades.resultado[i].id_unidad + '">' + unidades.resultado[i].nombre + '</option>');
            }

        } else if (unidades.state == "false") {
            alert('Ocurrio un error. <br /> Error: ' + unidades.reason);
					if (unidades.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}			
        }
    });

}


function consultaLineas() {

	if(idRolUsuarioSesion != 1){
		$('#usuarioAdministrador').attr("style", "display: none");;
		$('#otroUsusario').attr("style", "display: true");
		idLines = idLineaSesion;
		ShowControls();
		consultaRoles();
	}else{
		$('#reportes').prop('disabled', true);
		$('#roles').prop('disabled', true);
		$('#unidades').prop('disabled', true);
		$('#btngo2').prop('disabled', true);
		$('#btngo1').prop('disabled', true);
	
		if ($('#reportes option:selected').val() != 3) {
			$('#btnGenerar').prop('disabled', true);
			ShowControls();
			$.ajax({
				type: "POST",
				url: "http://166.78.2.40/mac/actia/back-end/ws_library.php",
				data: {
					func: "getLines",
					token: p
				}
			})
				.done(function (answer) {
					var lineas = JSON.parse(answer);

					if (lineas.state == "true") {
						var sel = $('#lineas').empty();
						var linea;
						for (linea in lineas.lineas) {
							sel.append('<option value="' + lineas.lineas[linea].id_cliente + '">' + lineas.lineas[linea].nombre + '</option>');
						}

					} else if (lineas.state == "false") {
						alert('Ocurrio un error. <br /> Error: ' + lineas.reason);
						if (lineas.reason == "Tu sesion expiró."){
						  window.location='Logout.php';
						}
					}

				});

		} else {
			HideControls();
			habilitaBotonGenerar();
			$('#btnLimpiar').attr("style", "display: true");
		}
	}
}

function HideControls() {
    $('#lineas').attr("style", "display: none");
    $('#roles').attr("style", "display: none");
    $('#unidades').attr("style", "display: none");
    $('#lbunidades').attr("style", "display: none");
    $('#lbroles').attr("style", "display: none");
    $('#lblineas').attr("style", "display: none");
    $('#btngo1').attr("style", "display: none");
    $('#btngo2').attr("style", "display: none");
    $('#btnselectall1').attr("style", "display: none");
    $('#btnselectall2').attr("style", "display: none");
    $('#btnselectall3').attr("style", "display: none");
    $('#btnLimpiar').attr("style", "display: none");
    $('#btnGenerar').attr("style", "display: none");
}

function ShowControls() {
    $('#lineas').attr("style", "display: true;width:80%");
    $('#roles').attr("style", "display: true;width:80%");
    $('#unidades').attr("style", "display: true;width:80%");
    $('#lbunidades').attr("style", "display: true");
    $('#lbroles').attr("style", "display: true");
    $('#lblineas').attr("style", "display: true");
    $('#btngo1').attr("style", "display: true");
    $('#btngo2').attr("style", "display: true");
    $('#btnselectall1').attr("style", "display: true");
    $('#btnselectall2').attr("style", "display: true");
    $('#btnselectall3').attr("style", "display: true");
    $('#btnLimpiar').attr("style", "display: true");
}


function btnGenerar() {

    if ($('#reportes option:selected').val() == 0) {
        alert("Debe seleccionar un reporte a presentar");
    } else if ($('#reportes option:selected').val() == 1) {
        $("#chartContainer").hide();
        mapa.visible = true;
        $("#map-canvas").show();
        ubicacionexacta();
    } else if ($('#reportes option:selected').val() == 2) {
        $("#chartContainer").hide();
        mapa.visible = true;
        $("#map-canvas").show();
        altosTotales();
    } else if ($('#reportes option:selected').val() == 3) {
        $("#chartContainer").hide();
        mapa.visible = true;
        $("#map-canvas").show();
        checkpoints();
    } else if ($('#reportes option:selected').val() == 4) {
        $("#map-canvas").hide();
        mapa.visible = true;
        $("#chartContainer").show();
        comportamientoConduccion();
    } else if ($('#reportes option:selected').val() == 5) {
        $("#chartContainer").hide();
        mapa.visible = true;
        $("#map-canvas").show();
        kmrecorridos();
    }
}

function ubicacionexacta() {

    var idUnidades = "";
    $('#unidades :selected').each(function (i, selected) {
        idUnidades += $(selected).val() + ",";
    });

    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws.php",
        data: {
            func: "getUbicacionExacta",
            id_units: idUnidades,
            token: p
        }
    })
        .done(function (json) {
            var unidades = JSON.parse(json);
            if (unidades.state == "true") {
                GeneraMapa(unidades, 1, cz, lat, lon);
            } else if (unidades.state == "false") {
                alert('Ocurrio un error. <br /> Error: ' + unidades.reason);
					if (unidades.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}
            }

        });
    cz = map.getZoom();
    var center = map.getCenter();
    lat = center.lat();
    lon = center.lng();
}

function altosTotales() {

    var idUnidades = "";
    $('#unidades :selected').each(function (i, selected) {
        idUnidades += $(selected).val() + ",";
    });

    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws.php",
        data: {
            func: "getAltosTotales",
            id_units: idUnidades,
            token: p
        }

    })
        .done(function (json) {
            var unidades = JSON.parse(json);
            if (unidades.state == "true") {
                GeneraMapa(unidades, 2, cz, lat, lon);
            } else if (unidades.state == "false") {
                alert('Ocurrio un error. <br /> Error: ' + unidades.reason);
					if (unidades.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}
            }


        });
    cz = map.getZoom();
    var center = map.getCenter();
    lat = center.lat();
    lon = center.lng();

}

function checkpoints() {

    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws_library.php",
        data: {
            func: "getCheckPoints",
            token: p
        }
    })
        .done(function (json) {
            var chkpoints = JSON.parse(json);
            if (chkpoints.state == "true") {
                GeneraMapa(chkpoints, 3, cz, lat, lon);
            } else if (chkpoints.state == "false") {
                alert('Ocurrio un error. <br /> Error: ' + chkpoints.reason);
					if (chkpoints.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}
            }

        });

}

function comportamientoConduccion() {
    var idUnidades = "";
    $('#unidades :selected').each(function (i, selected) {
        idUnidades += $(selected).val() + ",";
    });

    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws.php",
        data: {
            func: "getComportamientoConduccion",
            id_units: idUnidades,
            token: p
        }
    })
        .done(function (json) {
            var grafica = JSON.parse(json);
            if (grafica.state == "true") {
                GenerarGrafica(grafica);
            } else if (grafica.state == "false") {
                alert('Ocurrio un error. <br /> Error: ' + grafica.reason);
					if (grafica.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}
            }

        });

}


function kmrecorridos() {

    var idUnidades = "";
    $('#unidades :selected').each(function (i, selected) {
        idUnidades += $(selected).val() + ",";
    });

    $.ajax({
        type: "POST",
        url: "http://166.78.2.40/mac/actia/back-end/ws.php",
        data: {
            func: "getKilometrosRecorridos",
            id_units: idUnidades,
            token: p
        }
    })
        .done(function (json) {
            var unidades = JSON.parse(json);
            if (unidades.state == "true") {
                GeneraMapa(unidades, 5, cz, lat, lon);
            } else if (unidades.state == "false") {
                alert('Ocurrio un error. <br /> Error: ' + unidades.reason);
					if (unidades.reason == "Tu sesion expiró."){
					  window.location='Logout.php';
					}
            }
        });

    cz = map.getZoom();
    var center = map.getCenter();
    lat = center.lat();
    lon = center.lng();
}


function setMarkers(map, json) {
    var image = {
        url: 'images/checkpoint_icon.png',
        size: new google.maps.Size(32, 32),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(0, 32)
    };

    for (var i = 0; i < json.checkpoints.length; i++) {
        var data = json.checkpoints[i],
            latLng = new google.maps.LatLng(data.latitud, data.longitud)

            var marker = new google.maps.Marker({
                position: latLng,
                title: trim(data.checkpoint),
                map: map,
                icon: image
            });

        var contentString = '<div id="content" >' +
            '<center><h3 id="firstHeading" class="firstHeading">Checkpoint</h3></center>' +
            '<div id="bodyContent">' +
            '<p><b>Nombre: </b> ' + data.checkpoint + '</p>' +
            '<p><b>Latitud: </b> ' + data.latitud + '</p>' +
            '<p><b>Longitud: </b> ' + data.longitud + '</p>' +
            '</div>' +
            '</div>';

        mostrarMensaje(marker, contentString, map);

    }

}

function setUnitsStops(map, json) {
    var image = {
        url: 'images/bus.png',
        size: new google.maps.Size(32, 32),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(0, 32)
    };

    for (var i = 0; i < json.camiones.length; i++) {
        var data = json.camiones[i],
            latLng = new google.maps.LatLng(data.latitud, data.longitud)

            var marker = new google.maps.Marker({
                position: latLng,
                title: trim(data.num_unidad.toString()),
                map: map,
                icon: image
            });

        var contentString = '<div id="content" >' +
            '<center><h3 id="firstHeading" class="firstHeading">Unidad</h3></center>' +
            '<div id="bodyContent">' +
            '<p><b>Linea: </b> ' + data.linea + '</p>' +
            '<p><b>No. de Unidad: </b> ' + data.num_unidad + '</p>' +
            '<p><b>Rol: </b> ' + data.rol + '</p>' +
            '<p><b>Longitud: </b> ' + data.longitud + '</p>' +
            '<p><b>Latitud: </b> ' + data.latitud + '</p>' +
            '<p><b>Tiempo en Alto: </b> ' + data.tiempo_parado + '</p>' +
            '</div>' +
            '</div>';
        mostrarMensaje(marker, contentString, map);

    }

    setTimeout(function () {
        altosTotales();
    }, 30000);
}


function setUnitsReal(map, json) {
    var image = {
        url: 'images/bus.png',
        size: new google.maps.Size(32, 32),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(0, 32)
    };

    for (var i = 0; i < json.camiones.length; i++) {
        var data = json.camiones[i],
            latLng = new google.maps.LatLng(data.latitud, data.longitud)

            var marker = new google.maps.Marker({
                position: latLng,
                title: trim(data.num_unidad.toString()),
                map: map,
                icon: image
            });


        var contentString = '<div id="content" >' +
            '<center><h3 id="firstHeading" class="firstHeading">Unidad</h3></center>' +
            '<div id="bodyContent">' +
            '<p><b>Linea: </b> ' + data.nombre + '</p>' +
            '<p><b>No. de Unidad: </b> ' + data.num_unidad + '</p>' +
            '<p><b>Rol: </b> ' + data.rol + '</p>' +
            '<p><b>Velocidad : </b> ' + data.velocidad + '</p>' +
            '<p><b>RPM: </b> ' + data.rpm + '</p>' +
            '<p><b>Nivel de combustible: </b> ' + data.combustible + '</p>' +
            '<p><b>Longitud: </b> ' + data.longitud + '</p>' +
            '<p><b>Latitud: </b> ' + data.latitud + '</p>' +
            '</div>' +
            '</div>';
        mostrarMensaje(marker, contentString, map);

    }

    setTimeout(function () {
        ubicacionexacta();
    }, 30000);

}


function setUnitsKm(map, json) {
    var service = new google.maps.DirectionsService();
    var Path = [];
    var data;
    var data2;
    var latLng;
    var latLng2;
	var Path2 = [];
	var BusPath;
	
    var bluepoint = {
        url: 'images/bluepoint.png',
        origin: new google.maps.Point(0, 0),
    };
    for (var i = 0; i < json.camiones.length; i++) {
        for (var j = 0; j < json.camiones[i].length; j++) {

            var data = json.camiones[i][j];
            var latLng = new google.maps.LatLng(data.latitud, data.longitud);
            Path.push(latLng);

            var marker = new google.maps.Marker({
                position: latLng,
                map: map,
                icon: bluepoint
            });

            var contentString = '<div id="content" >' +
                '<center><h3 id="firstHeading" class="firstHeading">Km Recorridos</h3></center>' +
                '<div id="bodyContent">' +
                '<p><b>Linea: </b> ' + data.cliente + '</p>' +
                '<p><b>No. de Unidad: </b> ' + data.num_unidad + '</p>' +
                '<p><b>Rol: </b> ' + data.rol + '</p>' +
                '<p><b>Velocidad : </b> ' + data.velocidad + '</p>' +
                '<p><b>RPM: </b> ' + data.rpm + '</p>' +
                '<p><b>Longitud: </b> ' + data.longitud + '</p>' +
                '<p><b>Latitud: </b> ' + data.latitud + '</p>' +
                '<p><b>Odometro: </b> ' + data.odometro + '</p>' +
                '</div>' +
                '</div>';
            mostrarMensaje(marker, contentString, map);


        }
    }

	BusPath = new google.maps.Polyline({
		path: Path,
		geodesic: true,
		strokeColor: '#559a9d',
		strokeOpacity: 1.0,
		strokeWeight: 2
	});


    var image = {
        url: 'images/bus.png',
        size: new google.maps.Size(32, 32),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(0, 32)
    };

    for (var i = 0; i < json.camiones.length; i++) {
        var data = json.camiones[i][json.camiones[i].length - 1];
        var latLng = new google.maps.LatLng(data.latitud, data.longitud);

        var marker = new google.maps.Marker({
            position: latLng,
            title: trim(data.num_unidad.toString()),
            map: map,
            icon: image
        });

        var contentString = '<div id="content" >' +
            '<center><h3 id="firstHeading" class="firstHeading">Unidad</h3></center>' +
            '<div id="bodyContent">' +
            '<p><b>Linea: </b> ' + data.cliente + '</p>' +
            '<p><b>No. de Unidad: </b> ' + data.num_unidad + '</p>' +
            '<p><b>Rol: </b> ' + data.rol + '</p>' +
            '<p><b>Velocidad : </b> ' + data.velocidad + '</p>' +
            '<p><b>RPM: </b> ' + data.rpm + '</p>' +
            '<p><b>Longitud: </b> ' + data.longitud + '</p>' +
            '<p><b>Latitud: </b> ' + data.latitud + '</p>' +
            '</div>' +
            '</div>';
        mostrarMensaje(marker, contentString, map);
    }
	BusPath.setMap(map);	
    setTimeout(function () {
        kmrecorridos();
    }, 30000);
}


function mostrarMensaje(marker, contentString, map) {

    var infoWindow = new google.maps.InfoWindow({
        content: contentString
    });

    google.maps.event.addListener(marker, 'click', function () {
        infoWindow.open(map, marker);

    });

}

function GenerarGrafica(json) {
    var chart = new CanvasJS.Chart("chartContainer", {
        title: {
            text: "Comportamiento de Conducción"
        },
        axisY: {
            title: "Porcentaje de tiempo",
            interval: 10,
            suffix: "%"
        },
        axisX: {
            title: "Número de Unidad",
            labelAngle: 50
        }
    });

    var series1 = {
        indexLabel: "{y}",
        indexLabelFontSize: 12,
        indexLabelPlacement: "inside",
        type: "stackedColumn100",
        legendText: "Ralenti",
        showInLegend: "true"
    };

    var series2 = {
        indexLabel: "{y}",
        indexLabelFontSize: 12,
        indexLabelPlacement: "inside",
        type: "stackedColumn100",
        indexLabelPlacement: "inside",
        legendText: "Conducción económica",
        showInLegend: "true",
    };

    var series3 = {
        indexLabel: "{y}",
        indexLabelFontSize: 12,
        indexLabelPlacement: "inside",
        type: "stackedColumn100",
        legendText: "Conducción en potencia",
        showInLegend: "true"
    };

    var series4 = {
        indexLabel: "{y}",
        indexLabelFontSize: 12,
        indexLabelPlacement: "inside",
        type: "stackedColumn100",
        legendText: "Sobrerevoluciones",
        showInLegend: "true"
    };

    chart.options.data = [];
    chart.options.data.push(series1);
    chart.options.data.push(series2);
    chart.options.data.push(series3);
    chart.options.data.push(series4);

    var data = [];
    var dataPoints1 = [];
    var dataPoints2 = [];
    var dataPoints3 = [];
    var dataPoints4 = [];

    for (var i = 0; i < json.camiones.length; i++) {
        var data = json.camiones[i];

        dataPoints1.push({
            y: Math.round(data.ralenti),
            label: data.num_unidad
        });
        dataPoints2.push({
            y: Math.round(data.economica),
            label: data.num_unidad
        });
        dataPoints3.push({
            y: Math.round(data.potencia),
            label: data.num_unidad
        });
        dataPoints4.push({
            y: Math.round(data.sobrerevoluciones),
            label: data.num_unidad
        });
    }

    series1.dataPoints = dataPoints1;
    series2.dataPoints = dataPoints2;
    series3.dataPoints = dataPoints3;
    series4.dataPoints = dataPoints4;

    chart.render();
}

function GeneraMapa(json, option, zoom, lat, lon) {

    var mapOptions = {
        center: new google.maps.LatLng(lat, lon),
        zoom: zoom,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("map-canvas"),
        mapOptions);

    switch (option) {
    case 1:
        setUnitsReal(map, json);
        break;
    case 2:
        setUnitsStops(map, json);
        break;
    case 3:
        setMarkers(map, json);
        break;
    case 5:
        setUnitsKm(map, json);
        break;


    }

}

function trim(myString) {
    return myString; 
}

function habilitaBotonGenerar() {
    $('#btnGenerar').attr("style", "display: true");
    $('#btnGenerar').prop('disabled', false);
}

function habilitaBoton1() {
    $('#btngo1').prop('disabled', false);
}

function habilitaBoton2() {
    $('#btngo2').prop('disabled', false);
}